﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CANO.Data.Helpers;
using CANO.Data.DAOs;
using CANO.Data.DAOs.Compromisos;

namespace CANO.WebSite.compromisos
{
	public partial class Compromiso : System.Web.UI.Page
	{
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!Page.IsPostBack)
			{
				//Set Session variables
				Session["currentModule"] = "Compromisos";

				//Fill Data
				this.fillDropDowns();
				this.fillData();

                if (Request.QueryString["Edit"] != "1")
                    DisableControls();
                else
                    btnCancelar.Visible = true;

			}
			//Bind Events buttons
			btnEditar.ServerClick += new EventHandler(btnEditar_ServerClick);
			btnVolver.ServerClick += new EventHandler(btnVolver_ServerClick);
			btnUpdateCompromiso.Click += new EventHandler(btnUpdateCompromiso_Click);
			btnUpdateEntrevista.Click += new EventHandler(btnUpdateEntrevista_Click);
			btnCompartirCon.Click += new EventHandler(btnCompartirCon_Click);
			btnGenerarSeguimiento.Click += new EventHandler(btnGenerarSeguimiento_Click);
            btnCancelar.Click += btnEliminar_ServerClick;
            //btnCancelarEntrevista.Click += btnCancelarEntrevista_Click;
            btnEliminar.ServerClick +=btnEliminar_ServerClick;
		}

        void btnCancelarEntrevista_Click(object sender, EventArgs e)
        {
            int CompromisoID = Convert.ToInt32(Request.QueryString["id"]);

                new EntrevistaDAO().Delete(CompromisoID);
                Response.Redirect("../Index.aspx");
        }

        void btnEliminar_ServerClick(object sender, EventArgs e)
        {
            string confirmValue = Request.Form["hiddenDelete"];
            if (confirmValue == "Yes")
            {
               // this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                int TipoCompromiso = Convert.ToInt32(Request.QueryString["Type"]);
                int CompromisoID = Convert.ToInt32(Request.QueryString["id"]);

                if (TipoCompromiso == Convert.ToInt32(Enums.TipoEvento.Compromiso))
                {
                    CompromisoDAO.Delete(CompromisoID);
                    Response.Redirect("../Index.aspx");
                }
                else
                {
                    new EntrevistaDAO().Delete(CompromisoID);
                    Response.Redirect("../Index.aspx");
                }
            }
            else
            {
              //  this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
            }

           
        }

		private void DisableControls()
		{
			txtFechaHoraCompromiso.Disabled = true;
			txtFechaHoraEntrevista.Disabled = true;
			txtGenerarSeguimiento.Disabled = true;
			txtGenerarSegumientoHora.Disabled = true;
			ddlCompartirCon.Enabled = false;
			ddlContactoComprador.Enabled = false;
			ddlContactoCompromiso.Enabled = false;
			ddlContactoVendedor.Enabled = false;
			ddlTipoCompromiso.Enabled = false;
			ddlContactoCompromiso2.Enabled = false;
		}

		void btnGenerarSeguimiento_Click(object sender, EventArgs e)
		{
			throw new NotImplementedException();
		}

		void btnCompartirCon_Click(object sender, EventArgs e)
		{
			string type = Request.QueryString["Type"];

			new CompromisoDAO().Compartir(
				Convert.ToInt32(ddlCompartirCon.SelectedValue),
				Convert.ToInt32(Request.QueryString["id"]),
				Convert.ToInt32(type)
				);

			NotificationDAO notificacion = new NotificationDAO();

			if (Convert.ToInt32(type) == 2)
			{
				notificacion.Mensaje = string.Format("Se te compartió la entrevista entre {0} y {1}",
										new EntrevistaDAO().GetEntrevistaByID(Convert.ToInt32(Request.QueryString["id"])).ContactoCompradorDisplay, 
										new EntrevistaDAO().GetEntrevistaByID(Convert.ToInt32(Request.QueryString["id"])).ContactoVendedorDisplay);

				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), Convert.ToInt32(ddlCompartirCon.SelectedValue));
			}
			else
			{
				notificacion.Mensaje = string.Format("Se te compartió un compromiso del contacto {0}.",
									new ContactoDAO().GetNameByID( Convert.ToInt32(ddlContactoCompromiso.SelectedValue )));

				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), Convert.ToInt32(ddlCompartirCon.SelectedValue));
			}
			Response.Redirect("../compromisos/Compromiso.aspx?id=" + Request.QueryString["id"] + "&Type=" + type);
		}

		void btnUpdateEntrevista_Click(object sender, EventArgs e)
		{
			EntrevistaDAO entrevistaUpdated = new EntrevistaDAO();
			entrevistaUpdated.Hora = Convert.ToDateTime(txtFechaHoraEntrevista.Value);
			entrevistaUpdated.ContactoComprador = Convert.ToInt32(ddlContactoComprador.SelectedValue);
			entrevistaUpdated.ContactoVendedor = Convert.ToInt32(ddlContactoVendedor.SelectedValue);
			entrevistaUpdated.EntrevistaID = Convert.ToInt32(Request.QueryString["id"]);
			if (txtGenerarSeguimiento.Value != null && txtGenerarSegumientoHora.Value != null)
			{
				new SeguimientoDAO()
				{
					Hora = Convert.ToDateTime(txtGenerarSegumientoHora.Value),
					Descripcion = txtGenerarSeguimiento.Value,
					EntrevistaID = Convert.ToInt32(Request.QueryString["id"])
				}.Insert();

			}

			entrevistaUpdated.Update();

			NotificationDAO notificacion = new NotificationDAO();

			notificacion.Mensaje = string.Format("Se actualizó la entrevista entre {0} y {1}",
								new ContactoDAO().GetNameByID(entrevistaUpdated.ContactoComprador),
								new ContactoDAO().GetNameByID(entrevistaUpdated.ContactoVendedor));

			List<AsignacionesDAO> AsignacionesList = AsignacionesDAO.getAllByContactID(entrevistaUpdated.ContactoComprador);
			AsignacionesList.AddRange(AsignacionesDAO.getAllByContactID(entrevistaUpdated.ContactoVendedor));

			foreach (var item in AsignacionesList)
			{
				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), item.Usuario);
			}



			Response.Redirect("../compromisos/Compromiso.aspx?id=" + Request.QueryString["id"].ToString() +"&Type=" + Request.QueryString["Type"].ToString());
		}
		void btnUpdateCompromiso_Click(object sender, EventArgs e)
		{
			CompromisoDAO compromisoUpdated = new CompromisoDAO();
			compromisoUpdated.ContactoAsociado = Convert.ToInt32(ddlContactoCompromiso.SelectedValue);
			compromisoUpdated.FechaCompromiso = Convert.ToDateTime(txtFechaHoraCompromiso.Value);
			compromisoUpdated.TipoCompromiso = Convert.ToInt32(ddlTipoCompromiso.SelectedValue);
			compromisoUpdated.CompromisoID = Convert.ToInt32(Request.QueryString["id"]);
			compromisoUpdated.UsuarioResponsable = (Int32)Session["CurrentUserID"];
			
			if(ddlContactoCompromiso2.SelectedValue != "-- Seleccione un Contacto --")
				compromisoUpdated.ContactoAsociado2 = Convert.ToInt32(ddlContactoCompromiso2.SelectedValue);
			
			

			compromisoUpdated.Update();

			NotificationDAO notificacion = new NotificationDAO();

			notificacion.Mensaje = string.Format("Se actualizó {0} al contacto {1}.",
								new TipoCompromisoDAO().GetCompromisoDisplayByTipoID(Convert.ToInt32(ddlTipoCompromiso.SelectedValue)),
								new ContactoDAO().GetNameByID(compromisoUpdated.ContactoAsociado));

			List<AsignacionesDAO> AsignacionesList = AsignacionesDAO.getAllByContactID(compromisoUpdated.ContactoAsociado);

			foreach (var item in AsignacionesList)
			{
				notificacion.Insert(Convert.ToInt32(Session["CurrentUserID"]), item.Usuario);
			}


			Response.Redirect("../compromisos/Compromiso.aspx?id=" + Request.QueryString["id"].ToString() + "&Type=" + Request.QueryString["Type"].ToString());
		}

		void btnVolver_ServerClick(object sender, EventArgs e)
		{
			Response.Redirect("../Index.aspx");
		}

		void btnEditar_ServerClick(object sender, EventArgs e)
		{
			Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri + "&Edit=1");
		}

		private void fillData()
		{
			int TipoCompromiso = Convert.ToInt32(Request.QueryString["Type"]);
			int CompromisoID = Convert.ToInt32(Request.QueryString["id"]);

			if (TipoCompromiso == Convert.ToInt32(Enums.TipoEvento.Compromiso))
			{
				lblType.Text = "Compromiso";
				pnlCompromiso.Visible = true;
				CompromisoDAO compromisoDisplay = new CompromisoDAO().GetCompromisoByID(CompromisoID);

				txtFechaHoraCompromiso.Value = compromisoDisplay.FechaCompromiso.ToShortDateString() + " " + String.Format("{0:HH:mm}", compromisoDisplay.FechaCompromiso);
				ddlContactoCompromiso.SelectedValue = compromisoDisplay.ContactoAsociado.ToString();
				ddlTipoCompromiso.SelectedValue = compromisoDisplay.TipoCompromiso.ToString();
				ddlContactoCompromiso2.SelectedValue = compromisoDisplay.ContactoAsociado2.ToString();
				if (Request.QueryString["Edit"] != null)
				{
					btnUpdateCompromiso.Visible = true;
					pnlCompartirCompromiso.Visible = true;
				}
			}
			else if (TipoCompromiso == Convert.ToInt32(Enums.TipoEvento.Entrevista))
			{
				lblType.Text = "Entrevista";
				pnlEntrevista.Visible = true;
				EntrevistaDAO entrevistaDisplay = new EntrevistaDAO().GetEntrevistaByID(CompromisoID);

				txtFechaHoraEntrevista.Value = entrevistaDisplay.Hora.ToShortDateString() + " " + entrevistaDisplay.Hora.ToShortTimeString();
				ddlContactoComprador.SelectedValue = entrevistaDisplay.ContactoComprador.ToString();
				ddlContactoVendedor.SelectedValue = entrevistaDisplay.ContactoVendedor.ToString();

				rptSegumientos.DataSource = new SeguimientoDAO().GetSeguimientosByEntrevista(CompromisoID);
				rptSegumientos.DataBind();

				if (rptSegumientos.Items.Count <= 0)
				{
					pnlSinSeguimientos.Visible = true;
				}
				else
					pnlSinSeguimientos.Visible = false;

				if (Request.QueryString["Edit"] != null)
				{
					btnUpdateEntrevista.Visible = true;
                    //btnCancelarEntrevista.Visible = true;
					pnlGenerarSeguimiento.Visible = true;
					txtGenerarSegumientoHora.Value = DateTime.Now.ToShortDateString() + " " +DateTime.Now.ToShortTimeString();
					pnlCompartirCompromiso.Visible = true;
				}
			}

			rptCompartidoCon.DataSource = new CompromisoDAO().GetUsersByCompromisoID(CompromisoID, Convert.ToInt32(Request.QueryString["Type"]));
			rptCompartidoCon.DataBind();
			if (rptCompartidoCon.Items.Count <= 0)
			{
				pnlSinCompartidoCon.Visible = true;
			}

			if (Request.QueryString["Edit"] != null)
				btnCompartirCon.Visible = true;
		}

		private void fillDropDowns()
		{
			//Fill ddlTipoCompromiso
            ddlTipoCompromiso.DataSource = new TipoCompromisoDAO().GetAllByRol((Int32)Session["CurrentRolID"]).OrderBy(x => x.TipoCompromiso);
			ddlTipoCompromiso.DataValueField = "TipoCompromisoID";
			ddlTipoCompromiso.DataTextField = "TipoCompromiso";
			ddlTipoCompromiso.DataBind();
			ddlTipoCompromiso.Items.Insert(0, "-- Seleccione un Tipo de Compromiso --");


			//Fill ddlContactoComprador
            ddlContactoComprador.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoComprador.DataValueField = "ContactoID";
			ddlContactoComprador.DataTextField = "FullName";
			ddlContactoComprador.DataBind();
			ddlContactoComprador.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoVendedor.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoVendedor.DataValueField = "ContactoID";
			ddlContactoVendedor.DataTextField = "FullName";
			ddlContactoVendedor.DataBind();
			ddlContactoVendedor.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoCompromiso.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoCompromiso.DataValueField = "ContactoID";
			ddlContactoCompromiso.DataTextField = "FullName";
			ddlContactoCompromiso.DataBind();
			ddlContactoCompromiso.Items.Insert(0, "-- Seleccione un Contacto --");

			//Fill ddlContactoVendedor
            ddlContactoCompromiso2.DataSource = new ContactoDAO().GetContactsByUserID((Int32)Session["CurrentUserID"]).OrderBy(x => x.FullName);
			ddlContactoCompromiso2.DataValueField = "ContactoID";
			ddlContactoCompromiso2.DataTextField = "FullName";
			ddlContactoCompromiso2.DataBind();
			ddlContactoCompromiso2.Items.Insert(0, "-- Seleccione un Contacto --");

            ddlCompartirCon.DataSource = UsuarioDAO.getAll().OrderBy(x => x.FullName);
			ddlCompartirCon.DataValueField = "UsuarioID";
			ddlCompartirCon.DataTextField = "FullName";
			ddlCompartirCon.DataBind();
			ddlCompartirCon.Items.Insert(0, "-- Seleccione un Usuario --");

		}
	}
}